package chapter6;

/**
 * final变量，final修饰成员变量的时候，如果是静态变量，则只可在两个地方为其赋值
 * 1. 静态初始化块中
 * 2. 声明该变量时
 * 如果是非静态成员变量，则只可在三个地方为其赋值
 * 1. 非静态初始化块中
 * 2. 声明时直接赋值
 * 3. 构造方法中
 *
 * note：final变量在赋值前不允许访问，但是可以通过方法访问，使用时要注意final类型的初始化
 */
public class FinalVariableTest {
    final int a = 6;
    final String str;
    final int c;
    final static double d;
    //final char ch;
    {
        str = "java";
        //a = 9;
    }
    static {
        d = 5.6;
    }

    public FinalVariableTest() {
        c = 5;
    }

    public void changeFinal() {
        //d = 1.2;
        //ch = 'a';
    }

    public static void main(String[] args) {
        FinalVariableTest finalVariableTest = new FinalVariableTest();
        System.out.println(finalVariableTest.a);
        System.out.println(finalVariableTest.c);
        System.out.println(finalVariableTest.d);
    }
}
